﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;

namespace StaticPlugin
{
    public abstract class AJob
    {
        public class Action 
        {
            public Action(string n) { name = n; }
            public Action(string n, Function f) { name = n; func = f; }
            public string name;
            public delegate void Function(WebBrowser browser);
            public Function func;
        }
        /// <summary>
        /// возвращает положительное число. чем оно меньше тем выше приоритет. 
        /// если число отрицательное задача критическая
        /// </summary>

        //public delegate void Action(WebBrowser browser);
        protected List<Action> actions = new List<Action>();
        public List<Action> getActions() { return actions; }

        // Abstract methods
        protected abstract string getName();
        protected abstract string getStatus();
        protected abstract bool getAvailable();
        protected abstract int getPriority();

        public abstract bool testRequirements(WebBrowser browser);
        public abstract DialogResult showSetupDialog();
        public abstract void initActions();

        // DataPropertyNames
        public string Name { get { return getName(); } }
        public string Status { get { return getStatus(); } }
        public bool Available { get { return getAvailable(); } }
        public int Priority { get { return getPriority(); } }

    }

}
